home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / happy / start.doc < prev   
Encoding:
Text File  |  1993-07-08  |  10.9 KB  |  231 lines

  1. ==============================================================================
  2.  
  3.        HAPPy( H.Asano Pascal Processing system ) 
  4.                  Version 0.0
  5.  
  6.             P a s c a l 入 門
  7.  
  8.              Copyright (c) H.Asano 1992 
  9.  
  10. ==============================================================================
  11.  
  12.    このドキュメントは、気の向くままに作った未完成品です。悪しからずご了承く
  13.   ださい。形式にもこだわらずに書き進めていきます。読みにくくてごめんなさい。
  14.  
  15.    Pascal  という名前は、昔の有名な数学者にちなんでつけられたそうです。良い
  16.   名前だと思います。名前からしてかっこ良さそうです。そして実際、Pascalで書か
  17.   れたプログラムは、なんともいえないかっこの良さ、美しさがあります。
  18.     それに、今はやりのC言語よりもずっと易しいのです。
  19.  
  20.    Pascalは、習得が比較的容易です。コンピュータのハードウェアを全く意
  21.   識させない文法をもっています。私はつくづく、ああこれは文系の言語だなあ、と
  22.   感じてしまうのです。もともとが、大学の先生がプログラミング教育に用いるため
  23.   に設計した言語ですから、難しいわけがありません。生まれて初めてプロクラムに
  24.   接する人のために作られたのです。
  25.  
  26.     何はともあれ、Pascalのプログラムを生まれて初めて作ってみましょう。実戦あ
  27.   るのみです。コンソールに何かの文字を表示させる、というありきたりのものです
  28.   が、これでも立派なPascalプログラムです。
  29.        program name(output) ; 
  30.        begin
  31.          write('I am HAPPy')
  32.        end.
  33.   これをテキストエディタで打ち込んで、pcコマンドでコンパイルし、piコマンドを
  34.   たたいてみてください。
  35.       I am HAPPy
  36.   と表示されたでしょう。これであなたはPascalの入門ができました。
  37.  
  38.     どんなプログラムでも、最初は、program で始まります。次に適当なプログラム
  39.   の名前を書きます。この場合はnameとしました。そして( ) の中にoutputと書きま
  40.   す。これも決まりだと思えば良いでしょう。ここまでが頭書きです。次のbegin か
  41.   ら本体に入ります。write で、出力したい文字列を''で囲んで指定すればOKなので
  42.   す。どんなプログラムでも最後は、end.  で終わりです。
  43.  
  44.     次に作るのが、消費税計算機です。キーボードから元金を入力すると、消費税込
  45.   みの金額を表示する、というものを作ってみましょう。
  46.       program keisan(input,output) ;
  47.         var  gankin: integer ;
  48.       begin 
  49.         read(gankin) ;
  50.         write(gankin * 1.03)
  51.       end.
  52.  
  53.      最初の( ) 内に、input というのが書かれていますね。これはキーボードから
  54.   入力を行う時に、必ず指定が必要なものです。そう覚えておいて当分はOKです。
  55.   同じようにoutputは、コンソールに出力するプログラムの場合には、必ず指定が必
  56.   要です。
  57.     次の行に、 var  というのが現れました。var は、「variable」の略で、変数宣
  58.   言の開始という意味です。Pascalでは、使用する変数を事前にすべて宣言しておく
  59.   必要があります。このプログラムでは、number変数をinteger 型として宣言してい
  60.   ます。integer 型というのは整数値をとる型です。
  61.   begin で本体に入ります。readで、number変数にキーボードから整数値を読み込み
  62.   ます。そして、write で、number*1.03 計算結果を出力します。
  63.     実際に動かしてみましょう。
  64.     piコマンド投入後、キーボードから、
  65.       100 
  66.   と入れてください。そうすると、
  67.       1.030000E+002 
  68.   と出力されるはずです。1.03の10の2 乗という意味の出力結果ですが、これを少数
  69.   点以下四捨五入の整数で出力したいのならば、
  70.       write(round(number * 1.03)) 
  71.   というふうにwrite の部分を変更します。
  72.     100という入力に対して
  73.         103 
  74.   という答えが得られます。
  75.  
  76.   うんうん、あまり入門になりませんね。やっぱりきちんと順を追って説明しないと
  77.   駄目かなあ。多分そうでしょう。Version 0.0 では、入門書はあきらめました。
  78.   入門書を書くのが一番難しいのです。まともに書こうとすれば、市販の本と同じく
  79.   らいの分量になってしまい、それこそ1年くらいかかってしまうかもしれません。
  80.   今、私にはそこまでやる根気と時間がありません。
  81.  
  82.    話を変えて、なぜプログラミングはおもしろいかということについて、考えてみ
  83.   ましょう。
  84.    「ソフトウェアの話」(黒川利明著 岩波新書  1992年) には、なるほどと感心
  85.   させられる話が書いてあります。以下、ちょっと長くなるけど引用します。
  86.           --------------------
  87.    プログラミング言語の魔力について一言付け加えるなら、プログラミング言語に
  88.   は、実際にコンピュータを動かし、コンピュータを通じて外界に作用するという機
  89.   能がある。作用の中には、プログラムの間違いによる否定的な作用、迷惑も考えら
  90.   れるが。
  91.    これを、日常言語を発してもついに一物も動かしえない時のあの無力感と比較し
  92.   てみられるとよい。言葉は時に山をも動かし、人の命を奪いもすれば救いもするだ
  93.   けの力を秘めてはいるのだが、プログラミング言語をコンピュータに向けて発した
  94.   時のようなあの確実な反応を、日常言語に期待することはできない。まことに、プ
  95.   ログラミング言語は古代からの「言霊」を現代に復活させたかのようである。そし
  96.   て、プログラマには古代同様の注意が発せられるのである。
  97.    「願いの言葉を唱えてごらん。願いはかなえられるから。しかし注意しなさい。
  98.   その願いの言葉通りにかなえられるのだから」
  99.           --------------------
  100.    プログラムを作るという行為は、コンピュータを通じて自分が神になるような気
  101.     分なのです。自分の能力の範囲で、自分の願った通りにコンピュータを動かせる。
  102.   まさに気分は最高ですね(バグがなければ)。
  103.  
  104.    比較的値段の安い市販のPascal入門書として
  105.     「プログラミングガイド Pascal編  」
  106.             有澤誠  安村通晃  共著  近代科学社 1800 円 1992 年発刊
  107.   があります。慶応義塾大学の1年生用の教科書らしいです。扱っているプログラム
  108.   例題にパズル的なものが多く、おもしろいです。
  109.  
  110.     また、HAPPyがよりどころとしている標準Pascalの原典は、
  111.     「PASCAL 原書第3版」
  112.        K.イェンゼン・N.ヴィルト著/A.B.ミケル・J.マイナー改訂/原田賢一訳
  113.        培風館 2369円  1988年発刊
  114.   です。ここにのっているプログラムは、HAPPyで動くことを確認しています。
  115.   一部、動かないものもあります。また、なんと原典なのに間違ったプログラムがあ
  116.   るのも発見してしまいました。
  117.  
  118.    東京大学では、教養課程でPascalを勉強するそうです。プログラミングの
  119.   教育用として最も適した言語だからでしょう。
  120.  
  121.    「パーソナルコンピュータ利用技術認定試験」という民間の認定試験では、BA
  122.     SIC,C,Pascalの3種類から言語を選べるようになっています。Pas
  123.     calはあまり普及していないのに試験対象になっているのはなぜだろう、という
  124.     疑問があるかもしれません。試験が開始された1983年当時、Pascalは、
  125.   BASICの次のパソコン言語として注目されており、必須技術という背景があっ
  126.   たためです。現在もPascalを採用している理由は、たぶん、市販のコンピュ
  127.   ータサイエンスのほとんどの書籍がアルゴリズム記述用にPascalを使ってい
  128.   る事実があるのでPascalは一般教養として読めなければならない、というこ
  129.   とかなあ、と勝手に想像しています。
  130.    逆に、国家試験である「情報処理技術者試験」ではPascalは採用されてい
  131.   ません。産業界でポピュラーに使われている言語でないからでしょう。なんだか悔
  132.   しい気もします。
  133.  
  134.    どこかの本に、「Pascalおたく」というようなことが書かれていました。
  135.   Pascalが好きな人にはおたく的なところがあるというのです。実用という点
  136.   ではCに負けてしまうのに、CよりもPascalの方が好き、という人は、例え
  137.   ば私の場合には、出来上がりのプログラムソースの美しさ、読み安さ、分かりやす
  138.   さにこだわる傾向があるからでしょう。
  139.    といっても、HAPPyはPascalではなくてCで書いてあります。
  140.  
  141.    Pascalの言語機能のうち、とても気にいっているのが、列挙型と集合型で
  142.   す。C言語には列挙型はあるけど集合型はありません。
  143.  
  144.      program EnumSetSample(output) ;
  145.        type  Language    = (C,BASIC,Pascal,FORTRAN,COBOL,PLI) ;
  146.              Name        = (Asano,Suzuki,Tanaka,Sato) ;
  147.              LanguageSet = set of Language ;
  148.        var   Literacy    : array[name] of LanguageSet ; 
  149.              Common      : LanguageSet ;
  150.              N           : Name ; 
  151.              L           : Language ;
  152.      begin
  153.        Literacy[Asano]  := [C    ..     PLI] ;    { 浅野さんはすべてOK }
  154.        Literacy[Suzuki] := [C,FORTRAN,BASIC] ;
  155.        Literacy[Tanaka] := [BASIC,C,Pascal ] ;
  156.        Literacy[Sato]   := [BASIC,COBOL,C  ] ;
  157.        Common := [C..PLI] ;                       {  共通集合を求める  }
  158.        for N := Asano to Sato do
  159.          Common := Common * Literacy[N] ;
  160.        write('全員が使える言語は') ;
  161.        if Common = [] then writeln('ありません')  { 空集合は ありません}
  162.        else
  163.          begin 
  164.            for  L := C to PLI do
  165.              if L in Common  then               { 要素が含まれている時 }
  166.                case L of
  167.                  C       : write(' C ')       ;
  168.                  BASIC   : write(' BASIC ')   ;
  169.                  Pascal  : write(' Pascal ')  ;
  170.                  FORTRAN : write(' FORTRAN ') ;
  171.                  COBOL   : write(' COBOL ')   ;
  172.                  PLI     : write(' PL/I ')
  173.                end ;
  174.            writeln('です')
  175.          end  
  176.      end.
  177.  
  178.   浅野さん、佐藤さん、田中さん、鈴木さん(勿論架空の人物)の4人が共通して使
  179.   える言語を表示するプログラムを、列挙型と集合型を使って作りました。
  180.    Language型は、C,BASIC,Pascal,FORTRAN,COBOL,PLIという定数だけが操作の対象
  181.   となる型です。このように操作対象に意味のある名前を持たせ、その具体的値はプ
  182.   ログラムの本質的なものではないので表面上にはででこないという、エレガントさ
  183.   を持っています。Language型を持つ変数への代入は、この型が取りえる定数以外は
  184.   できないので、変数の持つ意味を非常に明確にできるわけです。
  185.    LanguageSet 型は、Language型を要素とする集合型です。数学の集合と同じよう
  186.   な演算ができます。ここでは *  という演算子で共通集合を求めています。
  187.       このプログラムを動かしてみると、 
  188.              全員が使える言語は C  BASIC です
  189.     というふうに表示されます。
  190.  
  191.   最後に、1 から13までの階乗を求めるプログラムを示します。
  192.  
  193.     program Kaijou(output) ;
  194.       const Max = 13 ;
  195.       var   n : integer;
  196.       function k(n:integer) : integer;
  197.       begin
  198.         if n > 1 then k := n * k(n-1) else k := 1
  199.       end;
  200.     begin {main}
  201.       for n:=1 to Max do  writeln(n,'! =',k(n))
  202.     end.
  203.  
  204.     実行すると次のように表示されます。
  205.  
  206.            1! =           1
  207.            2! =           2
  208.            3! =           6
  209.            4! =          24
  210.            5! =         120
  211.            6! =         720
  212.            7! =        5040
  213.            8! =       40320
  214.            9! =      362880
  215.           10! =     3628800
  216.           11! =    39916800
  217.           12! =   479001600
  218.           13! =  1932053504
  219.  
  220.    階乗は、n*(n-1)*(n-2)*(n-3)* ... * 1  で求められますが、これをPasca
  221.   lの特徴の一つである、再帰呼出しで計算しています。関数k は自分で自分を呼ん
  222.   でいて、数学でいうところの漸化式の表現がとても素直にできるわけです。
  223.  
  224.  
  225.     今回、Pascal入門をしっかりと書けませんでしたが、興味があれば、是非
  226.   プログラミングに挑戦してみてください。きっと新しい世界が広がると思います。
  227.   パソコンの最もエキサイティングな使い方はホビープログラミングであり、趣味の
  228.   王様とも言えます。でもあまりはまらない程度に楽しんでくださいね。
  229.  
  230.       ------ 以上 (START.DOC) 終わり  -------
  231. g